#include "TerminoUtil.h"


TerminoUtil::TerminoUtil(){
}

bool TerminoUtil::guardarTerminosEnArchivo(vector<TerminoIndexado> terminosIndexados, string salida){
	double cantBytes;
	int indiceArchivo = 0;
	string salidaNombre = salida+StringUtil::int2string(indiceArchivo);
	ofstream archivoSalida(salidaNombre.c_str(),ios::out);
	TerminoIndexado terminoActual;
	TerminoIndexado terminoAnterior;

	for(int i=0;i<terminosIndexados.size();i++){
		terminoActual = terminosIndexados[i];
		if(!esTerminoRepetido(terminoActual,terminoAnterior)){
			if(cantBytes/1024 > Constantes::TAM_BLOQUE){
				archivoSalida.close();
				archivoSalida.clear();
				indiceArchivo++;
				salidaNombre = salida+StringUtil::int2string(indiceArchivo);
				archivoSalida.open(salidaNombre.c_str(),ios::app);
				cantBytes = 0;
			}
			archivoSalida<<terminoActual.termino;
			archivoSalida<<Constantes::SEPARADOR_CAMPO_TERMINO;
			archivoSalida<<StringUtil::int2string(terminoActual.numeroDocumento);
			archivoSalida<<Constantes::SEPARADOR_CAMPO_TERMINO;
			for(int i = 0; i< terminoActual.posiciones.size();i++){
				archivoSalida<<StringUtil::int2string(terminoActual.posiciones.at(i));
				if(i != terminoActual.posiciones.size()-1){
					archivoSalida<<Constantes::SEPARADOR_CAMPO_POSICIONES;
				}
			}
			archivoSalida<<Constantes::SEPARADOR_TERMINO;
			terminoAnterior = terminoActual;
			cantBytes+=(terminoActual.termino.size()+cantidadDigitos(terminoActual.numeroDocumento)+2);
		}
	}
	archivoSalida.close();

}

bool TerminoUtil::esTerminoRepetido(TerminoIndexado terminoActual,TerminoIndexado terminoAnterior){
	return terminoActual.esIgualA(terminoAnterior);
}

int TerminoUtil::cantidadDigitos(int entrada) {
	int x = 0;
	while (entrada != 0) {
		entrada /=10;
		x = x + 1;
	}
	return x;
}

